package com.zhang.test;

import java.io.*;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Base64;

public class ImageBase64Converter {

//    public static void main(String[] args) {
//        String imagePath = "xiaofang.jpg";
//        String base64String;
//
//        try {
//            // 图片转Base64编码
//            base64String = encodeImageToBase64(imagePath);
//            System.out.println("图片Base64编码成功，长度：" + base64String.length());
//
//            // Base64编码转回图片（验证用）
//            String outputPath = "src/main/resources/xiaofang_decoded22.jpg";
//            decodeBase64ToImage(base64String, outputPath);
//            System.out.println("\nBase64解码成功，图片已保存至：" + outputPath);
//
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
//    }

    public static void main(String[] args) {
        String dataUrl = "";
        // 截取Base64编码部分（去掉"data:image/jpeg;base64,"前缀）
        String base64String = dataUrl.contains(",")
                ? dataUrl.split(",")[1].trim()
                : dataUrl;
        try {
            String outputPath = "src/main/resources/parsed_image233.jpg";
            decodeBase64ToImage(base64String, outputPath);
            System.out.println("图片解析成功，保存路径：" + outputPath);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 使用类加载器读取资源图片并编码为Base64字符串
     * @param resourcePath 资源路径（相对于src/main/resources目录）
     * @return Base64编码字符串
     * @throws IOException IO异常
     */
    public static String encodeImageToBase64(String resourcePath) throws IOException {
        // 通过类加载器获取资源输入流（资源路径无需带"/"，默认从classpath根目录查找）
        try (InputStream inputStream = ImageBase64Converter.class.getClassLoader().getResourceAsStream(resourcePath);
             ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) {

            if (inputStream == null) {
                throw new IOException("未找到资源文件: " + resourcePath);
            }

            // 读取输入流到字节数组输出流
            byte[] buffer = new byte[1024];
            int bytesRead;
            while ((bytesRead = inputStream.read(buffer)) != -1) {
                outputStream.write(buffer, 0, bytesRead);
            }

            // 编码为Base64字符串
            return Base64.getEncoder().encodeToString(outputStream.toByteArray());
        }
    }

    /**
     * 将Base64字符串解码为图片文件
     * @param base64String Base64编码字符串
     * @param outputPath 输出图片路径
     * @throws IOException IO异常
     */
    public static void decodeBase64ToImage(String base64String, String outputPath) throws IOException {
        // 解码Base64字符串为字节数组
        byte[] imageBytes = Base64.getDecoder().decode(base64String);
        
        // 将字节数组写入文件
        try (OutputStream outputStream = new FileOutputStream(outputPath)) {
            outputStream.write(imageBytes);
        }
    }
}